/***********************************************************************
 * Module:  Velo.java
 * Author:  Simon
 * Purpose: Defines the Class Velo
 ***********************************************************************/

package Modele;

import java.util.*;

import DAO.DAOLocation;
import DAO.DAOReparation;
import DAO.DAOStationnement;

/** Objet définissant les vélos */
public class Velo {
	/** Identifiant du vélo */
	private int idVelo;
	/** Booléen le vélo est fonctionnel */
	private boolean estFonctionnel;
	/** Date d'achat du vélo */
	private Date dateAchat;
	/** Flag d'activité */
	private boolean estActif;

	/**
	 * Instancie un nouveau vélo
	 * 
	 * @param estFonctionnel
	 *            Indicateur de fonctionnalité du vélo
	 * @param dateAchat
	 *            Date d'achat du vélo
	 * @param estActif
	 *            Flag d'activité
	 */

	public Velo(Boolean estFonctionnel, Date dateAchat, boolean estActif) {
		this.estFonctionnel = estFonctionnel;
		this.dateAchat = dateAchat;
		this.estActif = estActif;
	}

	/**
	 * Instancie un nouveau vélo
	 * 
	 * @param idVelo
	 *            Identifiant du vélo
	 * @param estFonctionnel
	 *            Indicateur de fonctionnalité du vélo
	 * @param dateAchat
	 *            Date d'achat du vélo
	 * @param estActif
	 *            Flag d'activité
	 */

	public Velo(int idVelo, Boolean estFonctionnel, Date dateAchat,
			boolean estActif) {
		this.idVelo = idVelo;
		this.estFonctionnel = estFonctionnel;
		this.dateAchat = dateAchat;
		this.estActif = estActif;
	}

	/**
	 * Renvoie l'identifiant du vélo
	 * 
	 * @return L'identifiant
	 */
	public int getIdVelo() {
		return idVelo;
	}

	/**
	 * Indique si le vélo est fonctionnel
	 * 
	 * @return Booléen le vélo est fonctionnel
	 */
	public boolean getEstFonctionnel() {
		return estFonctionnel;
	}

	/**
	 * Assigne l'état fonctionnel du vélo
	 * 
	 * @param newEstFonctionnel
	 */
	public void setEstFonctionnel(boolean newEstFonctionnel) {
		estFonctionnel = newEstFonctionnel;
	}

	/**
	 * Renvoie la date d'achat du vélo
	 * 
	 * @return La date d'achat
	 */
	public Date getDateAchat() {
		return dateAchat;
	}

	/**
	 * Assigne la date d'achat du vélo
	 * 
	 * @param newDateAchat
	 */
	public void setDateAchat(Date newDateAchat) {
		dateAchat = newDateAchat;
	}

	/**
	 * Renvoie la liste de sationnements
	 * 
	 * @return La liste de stationnements
	 */
	public List<Stationnement> getStationnements() {
		ArrayList<Stationnement> stationnements = new ArrayList<Stationnement>();

		for (Stationnement stat : DAOStationnement.getAllStationnement()) {
			if (stat.getIdVelo() == getIdVelo())
				stationnements.add(stat);
		}

		return stationnements;
	}

	/**
	 * Renvoie la liste de réparations
	 * 
	 * @return La liste de réparations
	 */
	public List<Reparation> getReparations() {
		ArrayList<Reparation> reparations = new ArrayList<Reparation>();

		for (Reparation rep : DAOReparation.getAllReparation()) {
			if (rep.getIdVelo() == getIdVelo())
				reparations.add(rep);
		}

		return reparations;
	}

	/**
	 * Renvoie la liste de locations
	 * 
	 * 
	 * @return La liste de locations
	 */
	public List<Location> getLocations() {
		ArrayList<Location> locations = new ArrayList<Location>();

		for (Location loc : DAOLocation.getAllLocation()) {
			if (loc.getIdVelo() == getIdVelo())
				locations.add(loc);
		}

		return locations;
	}

	/**
	 * Renvoie le flag d'activité
	 * 
	 * @return Le flag d'activité
	 */
	public boolean getEstActif() {
		return estActif;
	}

	/**
	 * Assigne le flag d'activité
	 * 
	 * @param newEstActif
	 */
	public void setEstActif(boolean newEstActif) {
		estActif = newEstActif;
	}
}